// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

namespace Microsoft.AspNetCore.Routing.Matching
{
    /// <summary>
    /// Defines the contract that a class must implement in order to check if a literal value is valid for a given constraint.
    /// <remarks>
    /// When a parameter implements this interface, the router is able to optimize away some paths from the route table that don't match this constraint.
    /// </remarks>
    /// </summary>
    public interface IParameterLiteralNodeMatchingPolicy : IParameterPolicy
    {
        /// <summary>
        /// Determines whether the given <paramref name="literal"/> can match the constraint.
        /// </summary>
        /// <param name="parameterName">The parameter name we are currently evaluating.</param>
        /// <param name="literal">The literal to test the constraint against.</param>
        /// <returns><c>true</c> if the literal contains a valid value; otherwise, <c>false</c>.</returns>
        bool MatchesLiteral(string parameterName, string literal);
    }
}
